import {_decorator, SpriteFrame, sys, native} from 'cc';
import {StorageManager} from "db://assets/scripts/common/StorageManager";
import {StorageKey} from "db://assets/scripts/common/StorageKey";

const {ccclass, property} = _decorator;

/**
 * 管理广告、分享、SDK相关内容的组件
 */
export class SDKUtils {
    /**
     * 平台
     */
    public static platform: string = 'cocos';
    /**
     * 广告图片
     */
    public static imgAd: SpriteFrame = null;
    /**
     * 分享图片
     */
    public static imgShare: SpriteFrame = null;
    /**
     * 是否开启Debug模式
     */
    public static isDebugMode: boolean = false;
    /**
     * 在线间隔
     */
    public static onlineInterval: number = -1;
    /**
     * 登录后会检查是否展示登录界面，而且只检查一次
     */
    public static isCheckOffline: boolean = false;
    /**
     * 是否正在播放广告
     */
    public static isWatchVideoAd: boolean = false;
    /**
     * 是否允许屏幕上下移动
     */
    public static isEnableMoving: boolean = false;
    /**
     * 是否允许屏幕缩放
     */
    public static isEnableZoom: boolean = false;
    /**
     * 未解锁日记
     */
    public static arrLockDiary = [];
    /**
     * 是否启用振动模式
     */
    public static isEnableVibrate: boolean = true;
    /**
     * 两次震动之间的间隔,AppActivity里面的震动间隔也是100
     */
    public static vibrateInterval: number = 100;
    /**
     * 上次震动时间
     */
    public static vibratePreTime: number = 0;

    /**
     * 自定义事件统计
     *
     * @param eventType 事件类型
     * @param params 自定义参数
     */
    public static customEventStatistics(eventType: string, params?: any) {
        // 当自定义参数为空时
        if (!params) {
            // 初始化
            params = {};
        }

        // 是否为新手
        // params.isNewBee = PlayerData.instance.isNewBee;

        if (this.platform === 'wx') {
            //@ts-ignore
            if (window['wx'] && window['wx']['aldSendEvent']) {
                //@ts-ignore
                window.wx['aldSendEvent'](eventType, params);
            }
        }

        //@ts-ignore
        if (this.platform === 'cocos' && window.cocosAnalytics && window.cocosAnalytics.isInited()) {
            console.log("###统计", eventType, params);
            //@ts-ignore
            window.cocosAnalytics.CACustomEvent.onStarted(eventType, params);
        }
    }

    /**
     * 振动
     */
    public static vibrateShort() {
        // 是否允许振动
        let isEnableVibrate = StorageManager.getInstance().getData(StorageKey.VIBRATION) ?? true;

        // 当不允许振动时
        if (!isEnableVibrate) {
            return;
        }

        // 当前时间
        let now = Date.now();
        // 当前时间 - 上次振动时间 >= 振动间隔
        if (now - this.vibratePreTime >= this.vibrateInterval) {
            // 记录振动时间
            this.vibratePreTime = now;
            // 振动
            if (sys.isNative) {
                native.reflection.callStaticMethod("com/cocos/game/AppActivity", "vibrator", "()V");
                //@ts-ignore
            } else if (window.wx) {
                //@ts-ignore
                wx.vibrateShort({
                    success: (result: any) => {
                    },
                    fail: () => {
                    },
                    complete: () => {
                    }
                });
            }
        }
    }

    /**
     * 微信分享
     *
     * @param title 标题
     * @param shareUrl 链接
     */
    public static shareGame(title: string, shareUrl: string) {
        // 当前不是微信平台时
        //@ts-ignore
        if (!window.wx) {
            // 直接返回
            return;
        }

        // 打开微信分享菜单
        //@ts-ignore
        wx.showShareMenu({
            withShareTicket: true,
            complete: () => {
            }
        });

        // 微信分享消息
        //@ts-ignore
        if (wx.aldOnShareAppMessage) {
            //@ts-ignore
            wx.aldOnShareAppMessage(function () {
                // 用户点击了“转发”按钮
                return {
                    title: title,
                    imageUrl: shareUrl,
                };
            });
        } else {
            //@ts-ignore
            wx.onShareAppMessage(function () {
                // 用户点击了“转发”按钮
                return {
                    title: title,
                    imageUrl: shareUrl,
                };
            });
        }
    }
}